#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N = 10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int n, ans;
bool col[N],dg[N][N],udg[N];//列,正对角,反对角

bool check(int x, int y)//45度角的特判
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (dg[i][j] && abs(i - x) == abs(j - y) && abs(i - x) < 3) return false;//对角线的特性			
		}
	}
	return true;
}

void dfs(int u)
{
	if (u == n) { ans++; return; }//走完

	for (int i = 0; i < n; i++)//枚举这一行,搜索合法放置的情况
	{
		if (!col[i] && check(u, i) && !udg[u + i])//减枝
		{
			col[i] =dg[u][i]= udg[u+i]=true;
			dfs(u + 1);
			col[i] = dg[u][i] = udg[u + i] = false;//不放这个
		}
	}
}

int main()
{
	close();
	cin >> n;
	dfs(0);
	cout << ans << '\n';
	return 0;
}
//只需要考虑45读角的皇后存在,反对角线不需要